<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // apply在某个方法调用时候限定该方法中this的指向
        // 作用:以某个对象的身份来调用指定的函数
        // 调用函数.apply(调用者,数组)
        function show(){
            console.log(this);
        }

        var user={
            name:"王子伟"
        };
        // show();

        show.apply(user);//user对象调用show函数
        show.apply([10,20,30,40]);//数组调用show函数

        // apply在指定this指向的时候，如果传入的不是一个对象数据，apply方法会将该数据转换为引用数据类型
        // "aaa"基本数据类型=>引用数据类型  new String("aaa")
        show.apply("aaa");
        show.apply(1234);
        show.apply(false);

        function show2(a,b){
            console.log(this);
            console.log(a);
            console.log(b);
        }
        // apply第二个参数可以自行的循环展开，将数组元素对应赋值给函数的形参
        show2.apply(user,["哈哈","嘻嘻"]);

        console.log(Math.max(100,3200,400,45,8,-9));
        console.log(Math.min(100,3200,400,45,8,-9));
        var arrs=[78,678,98,6,45,9,3,-19];
        console.log(Math.max.apply(arrs,arrs));//自行将第二个数组循环展开，一个个作为实参
        console.log(Math.max.apply(user,arrs));
        console.log(Math.max.apply(null,arrs));

        console.log(Math.min.apply("aa",[10,20,30,40]));

        var a=[1];
        var b=[1];
        console.log(a==b);

        /* 
            call和apply的区别在于参数传递的格式不一样
            如果是call，参数是一个一个以逗号隔开
            如果是apply，参数是以数组的形式传递的，后面的参数只能有一个，会自动拆开为多个元素传入
         */


    </script>
</body>
</html>